rain 툴을 사용해서 CloudFormation 템플릿을 배포해 봤습니다.
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 rain 툴을 사용해서 CloudFormation 템플릿을 배포해 봤습니다.
AWS CloudShell을 사용할 생각이므로 AWS CloudShell에 대한 설명은 아래 블로그를 참고해 주세요.
rain 설치
rain에 대한 특징과 설명, 설치 방법은 아래 URL에서 확인할 수 있습니다.
rain을 설치하기 위해 AWS CloudShell을 활용할 것이며, brew를 먼저 설치할 필요가 있습니다.
[cloudshell-user@ip-xx-xxx-xx-x ~]$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Press RETURN/ENTER to continue or any other key to abort: (엔터를 누릅니다.)
[cloudshell-user@ip-xx-xxx-xx-x ~]$ echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >> /home/cloudshell-user/.bash_profile
[cloudshell-user@ip-xx-xxx-xx-x ~]$ eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
[cloudshell-user@ip-xx-xxx-xx-x ~]$ brew --version
Homebrew 4.4.9
[cloudshell-user@ip-xx-xxx-xx-x ~]$ sudo yum install gcc -y
[cloudshell-user@ip-xx-xxx-xx-x ~]$ brew install rain
[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain --version
Rain v1.19.0 linux/amd64
brew와 gcc를 설치한 다음, brew를 이용해 rain을 성공적으로 설치할 수 있습니다.
rain을 이용하여 템플릿 생성
[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain
Rain is a command line tool for working with AWS CloudFormation templates and stacks
Usage:
rain [command]
Stack commands:
cat Get the CloudFormation template from a running stack
cc Interact with templates using Cloud Control API instead of CloudFormation
deploy Deploy a CloudFormation stack or changeset from a local template
logs Show the event log for the named stack
ls List running CloudFormation stacks or changesets
AWSTemplateFormatVersion: 2010-09-09
rm Delete a CloudFormation stack or changeset
stackset This command manipulates stack sets.
watch Display an updating view of a CloudFormation stack
Template commands:AWSTemplateFormatVersion: 2010-09-09
bootstrap Creates the artifacts bucket
build Create CloudFormation templates
diff Compare CloudFormation templates
fmt Format CloudFormation templates
forecast Predict deployment failures
merge Merge two or more CloudFormation templates
module Interact with Rain modules in CodeArtifact
pkg Package local artifacts into a template
tree Find dependencies of Resources and Outputs in a local template
AWSTemplateFormatVersion: 2010-09-09
Other Commands:
completion Generate the autocompletion script for the specified shell
console Login to the AWS console
help Help about any command
info Show your current configuration
rain을 입력해 보면, 사용할 수 있는 명령어를 확인할 수 있습니다. 여기서 [Template commands]의 build를 활용해서 샘플 템플릿을 생성할 수 있습니다.
[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain build AWS::EC2::VPC > VPC.yml
[cloudshell-user@ip-xx-xxx-xx-x ~]$ ls
VPC.yml
build 명령어로 VPC 템플릿을 생성해 보면, VPC.yml 파일이 생성된 것을 확인할 수 있습니다.
AWSTemplateFormatVersion: 2010-09-09
Description: Generated by rain
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: STRING
EnableDnsHostnames: BOOLEAN
EnableDnsSupport: BOOLEAN
InstanceTenancy: STRING
Ipv4IpamPoolId: STRING
Ipv4NetmaskLength: INTEGER
Tags:
- Key: STRING
Value: STRING
- Key: STRING
Value: STRING
코드를 확인해 보면, 말 그대로 샘플용으로 템플릿이 생성되며, 이 템플릿을 사용자 입 맛에 맞게 수정하면 됩니다.
rain을 이용하여 템플릿 배포
이번에는 샘플 템플릿을 수정하고 배포해 보도록 하겠습니다.
AWSTemplateFormatVersion: 2010-09-09
Description: Generated by rain
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: "10.0.0.0/24"
EnableDnsHostnames: "true"
EnableDnsSupport: "true"
InstanceTenancy: default
Tags:
- Key: Name
Value: "test-vpc"
VPC를 생성하기 위한 최소한의 옵션들만 작성했습니다.
[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain deploy VPC.yml
CloudFormation will make the following changes:
Stack VPC:
+ AWS::EC2::VPC VPC
Do you wish to continue? (Y/n) y
Deploying template 'VPC.yml' as stack 'VPC' in ap-northeast-1.
Stack VPC: CREATE_COMPLETE
Successfully deployed VPC
deploy 명령어를 입력하여 배포를 시작합니다.
계속 하겠냐는 물음에 y를 입력하면 배포가 시작됩니다.
배포가 끝나고 CloudFormation 콘솔 화면을 확인해 보면, VPC 스택이 생성된 것을 확인할 수 있습니다.
VPC 콘솔 화면에서도 생성된 VPC를 확인할 수 있습니다.
rain을 이용하여 템플릿 수정 및 삭제
이번에는 rain을 이용하여 배포한 템플릿을 수정하고 삭제해 보겠습니다.
AWSTemplateFormatVersion: 2010-09-09
Description: Generated by rain
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: "10.0.0.0/24"
EnableDnsHostnames: "true"
EnableDnsSupport: "true"
InstanceTenancy: default
Tags:
- Key: Name
Value: "hello-vpc"
수정한 결과를 알아보기 쉽게 태그 이름을 변경했습니다. (test-vpc -> hello-vpc)
[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain deploy VPC.yml
CloudFormation will make the following changes:
Stack VPC:
> AWS::EC2::VPC VPC
Do you wish to continue? (Y/n) y
Deploying template 'VPC.yml' as stack 'VPC' in ap-northeast-1.
Stack VPC: UPDATE_COMPLETE
Successfully updated VPC
수정된 템플릿을 배포하기 위해서는 이전과 동일하게 [deploy]를 사용합니다.
VPC 콘솔 화면에서 확인해 보면, test-vpc가 hello-vpc로 변경된 것을 확인할 수 있습니다.
[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain rm VPC
Stack VPC: UPDATE_COMPLETE
Are you sure you want to delete this stack? (y/N) y
Successfully deleted stack 'VPC'
마지막으로 템플릿을 삭제하기 위해 [rm]을 사용하면, 성공적으로 CloudFormation 스택이 삭제됩니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 jaewookkim533@yahoo.com로 보내주시면 감사하겠습니다.